#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//#include<stdlib.h>
//
//int main()
//{
//    int ra, ca;
//    scanf("%d %d", &ra, &ca);
//    int** a = (int**)malloc(sizeof(int*) * ra );
//
//    for (int i = 0; i < ra; i++)
//    {
//        a[i] = (int*)malloc(sizeof(int) * ca);
//    }
//
//    for (int i = 0; i < ra; i++)
//    {
//        for (int j = 0; j < ca; j++)
//        {
//            scanf("%d", &a[i][j]);
//        }
//    }
//
//    for (int i = 0; i < ra; i++)
//    {
//        for (int j = 0; j < ca; j++)
//        {
//            printf("%d ", a[i][j]);
//        }
//    }
//    for (int i = 0; i < ra; i++)
//    {
//        free(a[i]);
//    }
//    free(a);
//    return 0;
//}

#include<stdio.h>
#include<stdlib.h>
int add(int** a, int** b, int i, int j, int k)
{
    return a[i][k] * b[k][j];
}
int** creat(int ra, int ca)
{
    int** a = (int**)malloc(sizeof(int*) * ra);

    for (int i = 0; i < ra; i++)
    {
        a[i] = (int*)malloc(sizeof(int) * ca);
    }
    return a;
}

void Myfree(int** a, int ra)
{
    for (int i = 0; i < ra; i++)
    {
        free(a[i]);
    }
    free(a);
}

int main()
{
    int ra, ca;
    scanf("%d %d", &ra, &ca);
    int** a = creat(ra, ca);
    for (int i = 0; i < ra; i++)
    {
        for (int j = 0; j < ca; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }

    int rb, cb;
    scanf("%d %d", &rb, &cb);
    if (ca != rb)
        printf("Error: %d != %d", ca, rb);
    else
    {
        int** b = creat(rb, cb);
        for (int i = 0; i < rb; i++)
        {
            for (int j = 0; j < cb; j++)
            {
                scanf("%d", &b[i][j]);
            }
        }


        int** ret = creat(ra, cb);
        for (int i = 0; i < ra; i++)
        {
            for (int j = 0; j < cb; j++)
            {

                for (int k = 0; k < cb; k++)
                {
                    ret[i][j] += add(a, b, i, j, k);
                }
            }
        }
        for (int i = 0; i < ra; i++)
        {
            for (int j = 0; j < cb; j++)
            {
                printf("%d ", ret[i][j]);

            }
            printf("\n");
        }
        Myfree(ret, ra);
        Myfree(b, rb);

    }
    Myfree(a, ra);
    return 0;
}